/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package otcapp.controlador.seguridadDecoradores;

import java.util.HashMap;
import otcapp.controlador.*;

/**
 *
 * @author diego
 */
public class FabricaContrladores {

    private static FabricaContrladores instancia;
    private HashMap<Enum, Controlador> controladores = new HashMap<>();

    public static FabricaContrladores getInstancia() {
        if (instancia == null) {
            instancia = new FabricaContrladores();
        }
        return instancia;
    }

    /**
     * Enumeración con los nombres de los controladores que tendrá el sistema
     */
    public enum controlador {

        ABM_PERSONAL, ASIGNAR_PROFESIONAL, CONSULTAR_PIEZAS, INGRESAR_PIEZA, MENU_PRINCIPAL, INTERNOS, SUPERVISIONES, PRINCIPAL, PERFILES, USUARIO
    }

    /**
     * Crea un contrlador y lo inicia, si el contolador ya existe lo devuelve
     *
     * @param nombre
     */
    public Controlador getControlador(controlador nombre) {
        Controlador nuevoControlador = null;
        if (controladores.get(nombre) != null) {//El controlador ya ha sido iniciado
            return controladores.get(nombre);
        }
        switch (nombre) {
            case ABM_PERSONAL:
                nuevoControlador = new ABMPersonalControlador();
                break;
            case ASIGNAR_PROFESIONAL:
                nuevoControlador = new AsignarProfesionalControlador();
                break;
            case CONSULTAR_PIEZAS:
                nuevoControlador = new ConsultarPiezasControladorSeguridad();
                break;
            case INGRESAR_PIEZA:
                nuevoControlador = new IngresarPiezaControlador();
                break;
            case INTERNOS:
                nuevoControlador = new IngresarInternoControlador();
                break;
            case SUPERVISIONES:
                nuevoControlador = new SupervisionesControlador();
                break;
            case PRINCIPAL:
                nuevoControlador = new ControladorPrincipalSeguridad();
                break;
            case PERFILES:
                nuevoControlador = new ABMPerfilesControlador();
                break;
            case USUARIO:
                nuevoControlador = new ABMUsuariosControlador();
                break;

        }
        controladores.put(nombre, nuevoControlador);//agrega el contrlador a la lista
        return nuevoControlador;
    }
}
